package algocity.view.windows;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.AbstractButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToolBar;

import algocity.controller.BotonSelectConstruccionListener;
import algocity.controller.BotonSelectServicioListener;
import algocity.controller.VisorGeneralBotones;
import algocity.modelo.ModeloObservable;
import algocity.modelo.Posicion;
import algocity.view.Boton;
import algocity.view.VistaContadorTexto;
import algocity.view.VistaDeHectareaImagen;

public class PanelJuego extends JPanel {

	private static final long serialVersionUID = 1808038991426004814L;
	
	private static final Insets insets = new Insets(0,0,0,0);
	
	ModeloObservable modelo;
	JPanel juego = new JPanel();
	JToolBar menuConstruccion = new JToolBar(JToolBar.VERTICAL);
	JToolBar menuConexiones = new JToolBar(JToolBar.VERTICAL);
	JPanel panelSuperior = new JPanel();

	BotonSelectConstruccionListener selectConstruccion;
	BotonSelectServicioListener selectServicio;
	VisorGeneralBotones visorBotonPulsado;
	
	AbstractButton botonSeleccionado;
	AbstractButton edificioResidencial;
	AbstractButton pozoDeAgua;
	AbstractButton centralElectrica;
	AbstractButton centralEolica;
	AbstractButton avenida;
	AbstractButton lineaDeTension;
	AbstractButton tuberiaDeAgua;

	public PanelJuego(int cantidad, ModeloObservable modelo){
		
		super(new GridBagLayout());
		this.modelo = modelo;
		selectConstruccion = new BotonSelectConstruccionListener(modelo);
		visorBotonPulsado = new VisorGeneralBotones();
		
		panelSuperior.setLayout(new FlowLayout());
		
		juego.setLayout(new GridLayout(cantidad,cantidad));	
        for (int x = 1; x <= cantidad; x++) {
            for (int y = 1; y <= cantidad; y++) {
                juego.add(new VistaDeHectareaImagen(new Posicion(x, y), modelo));
            }
        }
        
        juego.setPreferredSize(new Dimension(600,600));
        iniciarComponentes();
	}
	
	private void iniciarComponentes(){
		
		edificioResidencial = new Boton("EdificioResidencial",visorBotonPulsado);
		pozoDeAgua = new Boton("PozoDeAgua",visorBotonPulsado);
		centralElectrica = new Boton("CentralElectrica",visorBotonPulsado);
		avenida = new Boton("Avenida",visorBotonPulsado);
		lineaDeTension = new Boton("LineaDeTension",visorBotonPulsado);
		tuberiaDeAgua = new Boton("TuberiaDeAgua",visorBotonPulsado);
		centralEolica = new Boton("CentralEolica",visorBotonPulsado);
		
        edificioResidencial.addMouseListener(selectConstruccion);
        pozoDeAgua.addMouseListener(selectConstruccion);
        centralElectrica.addMouseListener(selectConstruccion);
        avenida.addMouseListener(selectConstruccion);
        centralEolica.addMouseListener(selectConstruccion);
        
        lineaDeTension.addMouseListener(selectServicio);
        tuberiaDeAgua.addMouseListener(selectServicio);

		menuConstruccion.add(edificioResidencial);
		menuConstruccion.add(pozoDeAgua);
		menuConstruccion.add(centralElectrica);
		menuConstruccion.add(centralEolica);
		menuConstruccion.add(avenida);
		menuConstruccion.addSeparator();
		menuConexiones.add(lineaDeTension);
		menuConexiones.add(tuberiaDeAgua);
		menuConstruccion.setFloatable(true);

        panelSuperior.add(new VistaContadorTexto("Jhony",this.modelo));
        panelSuperior.add(new JLabel("/INFORMACION2/",JLabel.CENTER));
        panelSuperior.add(new JLabel("/INFORMACION3/",JLabel.CENTER));
        
		addComponent(this,panelSuperior,1,0,1,1,GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL);
		addComponent(this,menuConstruccion,0,1,1,2,GridBagConstraints.CENTER,GridBagConstraints.VERTICAL);
		addComponent(this,menuConexiones,0,3,1,2,GridBagConstraints.CENTER,GridBagConstraints.VERTICAL);
		addComponent(this,juego,1,1,6,6,GridBagConstraints.CENTER,GridBagConstraints.BOTH);
		addComponent(this,new Boton("Guardar"),0,5,1,1,GridBagConstraints.CENTER,GridBagConstraints.BOTH);
		
		AbstractButton salir = new Boton("Salir");
		salir.addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent e){
				System.exit(0);
			}});
		addComponent(this,salir,0,6,1,1,GridBagConstraints.CENTER,GridBagConstraints.BOTH);
	}
	
	private void addComponent(JPanel panel, Component component,
			int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill) {
		GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
		gridwidth, gridheight, 1.5, 1.5, anchor, fill, insets, 0, 0);
		panel.add(component, gbc);
	}	
}
